package org.fast.develop.logicflow.runtime.expression;

import org.fast.develop.logicflow.runtime.DefaultVariableScope;

import java.util.Map;

/**
 * 项 目 名：Builder
 * 源文件名：com.geekstorm.tto.builder.microservice.core.utils.SpringJuelExpressionActuator
 * 文件版本：1.0.0 创建人： 莫寅 创建日期：2020-03-12 09:28 修改作者：莫寅 修改日期：2020-03-12 09:28 文件描述：自定义Juel表达式
 * By：2020 © CompanyName , Inc. All Rights Reserved.
 */
public abstract class AbstractJuelExpressionActuator implements ExpressionActuator {

	private ExpressionManager expressionManager;

	public AbstractJuelExpressionActuator(ExpressionManager expressionManager) {
		this.expressionManager = expressionManager;
	}

	/***
	 * 执行juel表达式
	 * @param el 表达式
	 * @param var 参数
	 * @return
	 */
	@Override
	public Object invokeJuelExpression(String el, Map<String, Object> var) {
		Expression expression = createExpression(el);
		VariableScope impl = new DefaultVariableScope(var);
		return expression.getValue(impl);
	}

	protected Expression createExpression(String el) {
		Expression expression = expressionManager.createExpression(el);
		return expression;
	}

	/***
	 * 执行juel表达式
	 * @param el 表达式
	 * @param var 参数
	 * @return
	 */
	@Override
	public Boolean invokeJuelExpressionResultBoolean(String el, Map<String, Object> var) {
		Expression expression = createExpression(el);
		VariableScope impl = new DefaultVariableScope(var);
		return Boolean.parseBoolean(expression.getValue(impl).toString());
	}

	public ExpressionManager getExpressionManager() {
		return expressionManager;
	}

}
